Java诞生之初,其一大卖点,也是其成为主流编程语言的关键点,就是 一次编写,到处运行 。Java编译器会将源代码编译为平台无关的、压缩的Java字节码,即class文件。运行的时候,无需针对不同的硬件架构重新编译Java程序,因为运行Java程序的JVM是平台相关的,它负责将字节码转换为本地代码。
这种运行方式大大提升了程序的可移植性,喜大普奔。而使用其他一些语言,如C++,编写的应用程序,会被直接编译为平台相关的格式,大大降低了灵活性。以x86平台为例,C++编译器可能会对程序做大量的、针对x86平台的优化,所以编译后的应用程序也只能在x86架构的平台上运行,无法简单的将之移植到SPARC平台上,必须要重新编译才行,而且可能还不得不使用一款优化能力不像x86平台编译器那么强的才行。此外,如果x86平台本身做了升级,添加了新的指令,那么已经编译过的程序就无法利用上这些新的特性,除非是再重新编译一遍。当然,可以通过只发行源代码的方式来间接的达到可移植性的要求,但可能又会受到各种授权的限制。对Java来说,可移植性问题交由JVM解决,程序员无需为此操心。
就Java来说,凡是安装有JVM的平台都可以运行Java程序。具有平台独立特性的字节码并非Java发明,之前已经应用于其他几种编程语言,例如Pascal和Smalltalk,但Java确实第一个将之作为一大卖点的。
Java刚刚出现时,使用Java编写的应用程序大多是 Applet,用于嵌入到Web浏览器中运行,是典型的客户端应用程序。跨平台并非Java的唯一亮点,还包括其他一些令人兴奋的特性,例如内建的内存管理、缓冲保护和安全沙箱模型等。这些特性使Java不仅可以用于客户端程序的开发,还可以满足服务器端复杂业务逻辑开发的要求。
经过几年的努力发展,Java在服务器端开发的能力终于得到了广泛认可,其固有的健壮性使其开发速度快于C++,因此得以在服务器端开发中广为采用。当应用程序逻辑很复杂时,更短的开发周期就显得尤为重要。